package com.tom.joke;

import android.app.Application;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

import com.frame.library.skin.SkinManager;
import com.tom.baselibrary.ExceptionCrashHandler;
import com.alipay.euler.andfix.patch.PatchManager;
import com.tom.baselibrary.fixBug.FixDexManager;

/**
 * Added by Tom on 2024/06/25.
 */
public class BaseApplication extends Application {

    public static PatchManager mPatchManager;

    @Override
    public void onCreate() {
        super.onCreate();
        // 设置全局异常捕捉类。
         ExceptionCrashHandler.getInstance().init(this);
//        aliPatchTest();

        fixDexTest();
        // 初始化皮肤管理器, 避免内存泄漏。
        SkinManager.getInstance().init(this);
    }

    // 参考阿里方案，加载之前修复的dex包
    private void fixDexTest() {
        try {
            // app一进来，就加载之前已经修复好的所有 dex，将dex加载最前面。
            // 很耗时的一个操作，后续需要优化，优化后启动速度在 400ms左右。内存优化，应用加速。
            FixDexManager fixDexManager = new FixDexManager(this);
            fixDexManager.loadFixedDexes();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }


    private void aliPatchTest() {
        // 初始化阿里热修复
        mPatchManager = new PatchManager(this);
        // 用当前用版本，初始化版本。
        mPatchManager.init(getVersionName());
        // ****加载之前的 apatch 包。否则之前修复的无效。
        mPatchManager.loadPatch();
    }


    private String getVersionName() {
        try {
            PackageManager manager = getPackageManager();
            PackageInfo info = manager.getPackageInfo(getPackageName(), 0);
            return info.versionName;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}
